/**
 * 定义：TemplateLiteral 节点表示模板字符串，允许嵌入表达式。它使用反引号（`）来定义。
 */

const code = `const greeting = \`Hello, \${name}!\`;`;

const ast = parser.parse(code);

// 定义 visitor
const visitor = {
    TemplateLiteral(path) {
        console.log(`Found Template Literal: ${path.node.quasis.map(q => q.value.raw).join('')}`);
        // 替换模板字符串内容
        path.node.quasis.forEach((quasi) => {
            quasi.value.raw = quasi.value.raw.replace('Hello', 'Hi');
        });
    }
};

// 遍历 AST
traverse(ast, visitor);

// 生成新的代码
const { code: transformedCode } = generate(ast);
console.log(transformedCode);